home *** CD-ROM | disk | FTP | other *** search
- Program Paper;
-
- {$R-,I-,S-,L-,D-,G+}
-
- Uses
- WinTypes,WinProcs,WObjects,Strings;
-
- { Declare undocumented Windows API call }
-
- Procedure SetDeskWallpaper(Name : PChar);
- Far; External 'USER' Index 285;
-
- Var
- hPal : HPalette;
-
- {---------------------------------------------------}
-
- { --- App/Win Object declarations --- }
-
- Type
- TPaperApp = Object(TApplication)
- Procedure InitMainWindow; Virtual;
- End;
-
- PPaperWindow = ^PaperWindow;
- PaperWindow = Object(TWindow)
- Procedure SetupWindow;
- Virtual;
-
- Procedure WMQueryNewPalette(Var Msg : TMessage);
- Virtual wm_QueryNewPalette;
-
- Procedure WMPaletteChanged(Var Msg : TMessage);
- Virtual wm_PaletteChanged;
- End;
-
- {---------------------------------------------------}
-
- { --- App Methods --- }
-
- Procedure TPaperApp.InitMainWindow;
-
- Begin
- If hPrevInst = 0
- Then MainWindow := New(PPaperWindow,Init(nil,'Paper'))
- Else Halt(0);
- End {InitMainWindow};
-
- { --- Window Methods --- }
-
- {---------------------------------------------------}
-
- Procedure PaperWindow.SetupWindow;
-
- Var
- PaperStr : Array [0..80] Of Char;
- FName : String[80];
- DC : HDC;
- LogPal : TLogPalette;
- hOldPal : HPalette;
-
- Begin
- { Retreive filename - if none: we just fixup the palette }
- FName := ParamStr(1);
-
- If FName <> ''
- Then Begin
- { Add .BMP to filename, if necess. }
- If Pos('.',FName) = 0
- Then FName := FName + '.bmp';
-
- { Put string in "C" style }
- StrPCopy(PaperStr,FName);
-
- { Make sure we keep WIN.INI apprised of our changes }
- WriteProfileString('Desktop','Wallpaper',PaperStr);
-
- { Set the wallpaper }
- SetDeskWallpaper(PaperStr); { Undoc'd win call }
- End;
-
- { Invalidate the screen, even if we don't load a new wallpaper - if
- we don't do this, the "transparent" areas of icons will be fratzed up }
- InvalidateRect(0,Nil,False);
-
- { Create a small palette to fix the fact that loading the wallpaper
- doesn't realize the palette }
-
- LogPal.palVersion := $0300;
- LogPal.palNumEntries := 1;
- LogPal.palPalEntry[0].peRed := 0;
- LogPal.palPalEntry[0].peGreen := 0;
- LogPal.palPalEntry[0].peBlue := 0;
- LogPal.palPalEntry[0].peFlags := 0;
-
- { Get a DC and realize our palette }
- DC := GetDC(HWindow);
-
- hPal := CreatePalette(LogPal);
- hOldPal := SelectPalette(DC,hPal,False);
-
- RealizePalette(DC);
-
- { Close up our palette stuff }
- SelectPalette(DC,hOldPal,False);
-
- DeleteObject(hPal);
- ReleaseDC(HWindow,DC);
-
- { Close ourselves automatically }
- PostMessage(HWindow,wm_Close,0,0);
-
- End {SetupWindow};
-
- {---------------------------------------------------}
-
- Procedure PaperWindow.WMQueryNewPalette(Var Msg : TMessage);
-
- Var
- ahDC : HDC;
-
- Begin
- ahDC := GetDC(HWindow);
- SelectPalette(ahDC,hPal,False);
-
- If (RealizePalette(ahDC) > 0)
- Then Begin
- ReleaseDC(HWindow,ahDC);
- InvalidateRect(HWindow,Nil,False)
- End
- Else ReleaseDC(HWindow,ahDC);
- End {WMQueryNewPalette};
-
- {---------------------------------------------------}
-
- Procedure PaperWindow.WMPaletteChanged(Var Msg : TMessage);
-
- Var
- ahDC : HDC;
-
- Begin
- If Msg.wParam <> HWindow
- Then Begin
- ahDC := GetDC(HWindow);
- SelectPalette(ahDC,hPal,False);
-
- If (RealizePalette(ahDC) > 0)
- Then InvalidateRect(HWindow,nil,False);
-
- ReleaseDC(HWindow,ahDC);
- End;
- End {WMPaletteChanged};
-
- {---------------------------------------------------}
-
- { --- Main --- }
-
- Var
- PaperApp : TPaperApp;
-
- Begin
- CmdShow := sw_Minimize;
-
- PaperApp.Init('Paper');
- PaperApp.Run;
- PaperApp.Done;
- End.